from rest_framework import serializers
from rest_framework.serializers import StringRelatedField

#*******************************第一种方法*************************************
"""
class StudentSerializer(serializers.Serializer):
    #返回的字段数据和数据的校验
    id=serializers.IntegerField(label='ID',read_only=True) # read_only=True只读
    name=serializers.CharField(max_length=20,label='姓名')
    age=serializers.IntegerField(label='年龄',required=False) #required=False非必填字段
    sex=serializers.IntegerField(label='性别')
    c_time=serializers.DateTimeField(label='创建时间')
    u_time=serializers.DateTimeField(label='修改时间')
    is_delete=serializers.BooleanField(label='逻辑删除')
"""

#*******************************第二种方法*************************************
from study.models import Student, Classes


class StudentSerializer(serializers.ModelSerializer):
    #自定义
    # classes=StringRelatedField(read_only=True)  # 一般不会覆盖原字段
    class_name=serializers.CharField(read_only=True,source='classes.name')

    class Meta:
        model=Student
        fields='__all__'

        #  实现一个年龄大于零岁小于200岁的校验 0<age<200
        # extra_kwargs:给指定的属性添加或者修改参数
        extra_kwargs={
            'age':{
                'min_value':0,
                'max_value':200
            }
        }

'''
    # 自定义校验方法，对指定属性值进行校验
    """
    def validate_name(self,value):
        if 'python' not in value.lower():
            raise serializers.ValidationError('name error')
        return value

    """

    #自定义校验方法：获取所有属性的值
    """
    def validate(self, attrs):
        if 'python' not in attrs['name'].lower():
            raise serializers.ValidationError('name error')
        return attrs
    """
'''

class SimpleStudentSerializer(serializers.ModelSerializer):
    class Meta:
        model=Student
        fields=['id','name']


class ClassesSerializer(serializers.ModelSerializer):
    student_set=SimpleStudentSerializer(read_only=True,many=True)
    class Meta:
        model=Classes
        fields='__all__'
    def validate_name(self,value):
        if 'python' not in value:
            raise serializers.ValidationError('班级名称需含有python')
        return value